#pragma once

// Boost smart pointers
#include <boost\smart_ptr.hpp>


// Shared smart pointer from Boost libraries
// IMPORTANT: Use the macro SharedPointer_S!!!
template<class T> 
struct CSharedPointer_S
{
	typedef  boost::shared_ptr<T> m_Ptr;
};
#define SharedPointer_S(T) CSharedPointer_S<T>::m_Ptr


// Weak smart pointer from Boost libraries
// Use them in classes to avoid circular reduncancy
// when the smart pointers are trying to delete themselves
// IMPORTANT: Use the macro WeakPointer_S!!!
template<class T> 
struct CWeakPointer_S
{
	typedef  boost::weak_ptr<T> m_Ptr;
};
#define WeakPointer_S(T) CWeakPointer_S<T>::m_Ptr